AWS IoT Coreポリシーを設定して、特定のデバイスのみデータのやり取りができるよう制限してみた
AWS IoT Coreとやりとりするデバイスを制限したい
おのやんです。
みなさん、AWS IoT Core(以下、IoT Core)とデータをやり取りするデバイスを特定のものに制限したいと思ったことはありませんか?私はあります。
IoT Coreでデバイスとメッセージをやりとりする場合、セキュリティの観点から、個々のデバイスとパブリッシュ(データ送信), サブスクライブ(データ受信)できるトピックはそれぞれ一意になるようにIoTポリシーを設定するの望ましいです。
このポリシーを設定する場合、IoTポリシーをポリシー変数で制御できます。今回は、既存のIoT ポリシーにこちらを設定する機会がありましたので、設定の手順など紹介していきたいと思います。
IoT ポリシーの設定
今回は、既存のIoT ポリシーを編集する形で設定していきます。ポリシー詳細画面にて、「アクティブなバージョンを編集」ボタンを押下します。
次に、ポリシー編集画面にてJSONを入力していきます。JSONは以下のような内容を想定しています。
{
"Version": "2012-10-17",
"Statement": [
{
"Condition": {
"Bool": {
"iot:Connection.Thing.IsAttached": [
"true"
]
}
},
"Effect": "Allow",
"Action": "iot:Connect",
"Resource": "arn:aws:iot:ap-northeast-1:<account_id>:client/${iot:Connection.Thing.ThingName}"
},
{
"Effect": "Allow",
"Action": "iot:Publish",
"Resource": "arn:aws:iot:ap-northeast-1:<account_id>:topic/pub/${iot:Connection.Thing.ThingName}"
},
{
"Effect": "Allow",
"Action": "iot:Receive",
"Resource": "arn:aws:iot:ap-northeast-1:<account_id>:topic/sub/${iot:Connection.Thing.ThingName}"
},
{
"Effect": "Allow",
"Action": "iot:Subscribe",
"Resource": "arn:aws:iot:ap-northeast-1:<account_id>:topicfilter/sub/${iot:Connection.Thing.ThingName}"
}
]
}
1つ目の記述は、証明書を発行してアタッチまで行っているデバイスのみ接続を許可するルールです。IoT Coreに登録された各デバイスを"arn:aws:iot:ap-northeast-1:<account_id>:client/${iot:Connection.Thing.ThingName}"
で指定して、このうち証明書がアタッチされているデバイスのみAllowで許可しています。
{
"Condition": {
"Bool": {
"iot:Connection.Thing.IsAttached": [
"true"
]
}
},
"Effect": "Allow",
"Action": "iot:Connect",
"Resource": "arn:aws:iot:ap-northeast-1:<account_id>:client/${iot:Connection.Thing.ThingName}"
}
2つ目の記述は、メッセージのパブリッシュを指定したトピックへでのみ許可するルールです。こちらは、特定のトピックを"arn:aws:iot:ap-northeast-1:<account_id>:topic/pub/${iot:Connection.Thing.ThingName}"
で指定しています。:topic/
の後に、指定したいトピックを入力するのがポイントです。
{
"Effect": "Allow",
"Action": "iot:Publish",
"Resource": "arn:aws:iot:ap-northeast-1:<account_id>:topic/pub/${iot:Connection.Thing.ThingName}"
},
3つ目、4つ目の記述は、メッセージのサブスクライブとデバイスでの受信を指定したトピックからのみに許可するルールです。上記2つと同様に、"arn:aws:iot:ap-northeast-1:<account_id>:topicfilter/sub/${iot:Connection.Thing.ThingName}"
で許可するトピックを指定しています。特にiot:Subscribe
の場合は、:topicfilter/
の後に指定したいトピックを入力するのがポイントです。
{
"Effect": "Allow",
"Action": "iot:Receive",
"Resource": "arn:aws:iot:ap-northeast-1:<account_id>:topic/sub/${iot:Connection.Thing.ThingName}"
},
{
"Effect": "Allow",
"Action": "iot:Subscribe",
"Resource": "arn:aws:iot:ap-northeast-1:<account_id>:topicfilter/sub/${iot:Connection.Thing.ThingName}"
}
これらが入力できたら、「新しいバージョンとして保存」を押下します。
こちらのJSONは、現時点ではまだ本体のポリシーには適用されていません。さきほどのJSONは、この画面でいうバージョン「2」なので、ここを選択して「アクティブとして設定」を押下します。
これで、既存のポリシーに新しいJSONを設定できました。
IoT Coreトピックで、特定のデバイスのみデータのやり取りを許可できる
以上、IoT CoreトピックでJSONを設定して、データのやり取りを行うデバイスを特定のものに制限する手順についてでした。
IoT Core でデバイスを管理する時など、非常によく使いますので、概要だけでも把握していただければと思います。では!